home *** CD-ROM | disk | FTP | other *** search
- #VRML V2.0 utf8
- # Copyright (c) 1997 PLATINUM technology, inc.
- #ADD_PLANE_SENSOR
-
- DEF $OBJECTFallingTimer TimeSensor {loop FALSE }
- DEF $OBJECTGravity Script {
- eventIn SFBool isActive
- eventIn SFFloat fall
- eventIn SFVec3f userMovementPosition
- field SFVec3f current 0 0 0
- field SFFloat gravityConstant 9.8
- field SFFloat startHeight 0
- field SFFloat gravityBaseOffset 0
- eventOut SFTime startFallingTime
- eventOut SFTime hitgravityBaseOffsetTime
- eventOut SFTime theCycleInterval
- eventOut SFVec3f newPosition
- field SFFloat cycleInterval 0
- field SFFloat t 0
- field SFVec3f pos 0 0 0
- url "vrmlscript:
- function userMovementPosition(value)
- {
- current=value;
- }
- function isActive(value,ts)
- {
- if((!value) && (current[1] > 0.0))
- {
- startHeight=current[1];
- cycleInterval=Math.sqrt((2*(startHeight-gravityBaseOffset))/gravityConstant);
- theCycleInterval=cycleInterval;
- startFallingTime=ts;
- }
-
- }
- function fall(value,ts)
- {
- t=value*cycleInterval;
- pos[0]=current[0];
- pos[1]=startHeight-((.5*gravityConstant)*t*t);
- pos[2]=current[2];
- if (value >= 0.99)
- {
- hitgravityBaseOffsetTime=ts;
- }
- newPosition=pos;
- }
-
- "
- }
- ROUTE $OBJECTPS.isActive TO $OBJECTGravity.isActive
- ROUTE $OBJECTGravity.startFallingTime TO $OBJECTFallingTimer.set_startTime
- ROUTE $OBJECTGravity.theCycleInterval TO $OBJECTFallingTimer.set_cycleInterval
- ROUTE $OBJECTGravity.newPosition TO $OBJECTPS.set_offset
- ROUTE $OBJECTFallingTimer.fraction_changed TO $OBJECTGravity.fall
- ROUTE $OBJECTGravity.newPosition TO $OBJECTPS.set_offset
- ROUTE $OBJECTPS.translation_changed TO $OBJECT.set_translation
- ROUTE $OBJECTPS.translation_changed TO $OBJECTGravity.userMovementPosition
- ROUTE $OBJECTGravity.newPosition TO $OBJECT.set_translation
- ROUTE $OBJECTGravity.newPosition TO $OBJECTGravity.userMovementPosition
-
-
-
-
-
-